package proxy.dynamic;
import java.lang.reflect.Proxy;
/**
 * @Author: linKe
 * @Date: 2022/1/15 14:55
 * @FileName: Client
 * @version: 1.0
 * @Description: 客户端测试
 * 动态代理模式   代理创建接口对象
 */
public class Client {

    public static void main(String[] args) {
        PersonBeanImpl person = new PersonBeanImpl("LinKe", "Java", "年方99", 100);
        // newProxyInstance 返回将方法调用分派到指定调用处理程序的指定接口的代理类的实例。
        /*
        通过动态代理创建 获得一个人的代理对象
            loader – 定义代理类的类加载器
            interfaces – 代理类要实现的接口列表
            h - 将方法调用分派到的调用处理程序
        */
        PersonBean owner = (PersonBean) Proxy.newProxyInstance(Client.class.getClassLoader(), person.getClass().getInterfaces(),
                new OwnerHandler(person));

        System.out.println(owner.getName());
        owner.setInterests("睡觉");

        try {
            owner.setRato(99);
        }catch(Exception e) {
            System.out.println("别耍花招");
            ///e.printStackTrace();
        }

        System.out.println("测试别人开始");

        /*
         * 别人   另一个待对象
         */
        PersonBean noOwner = (PersonBean) Proxy.newProxyInstance(Client.class.getClassLoader(),
                person.getClass().getInterfaces(), new NoOwnerHandler(person));
        System.out.println(noOwner.getInterests());
        noOwner.setRato(99);
        try {
            noOwner.setInterests("呵呵");
        }catch(Exception e) {
            System.out.println("别人的信息你改不了");
        }
    }

}

